恶意代码的静态分析主要包括哪些方法
恶意代码的静态分析主要包括:
反恶意代码软件的检测和分析:反恶意代码软件检测恶意代码的方法有特征代码法、校验和法、行为监测法、软件模拟法等。根据恶意代码的信息去搜寻更多的资料,若该恶意代码的分析数据已被反恶意代码软件收录,那就可以直接利用它们的分析结果。
字符串分析:字符串分析的目的是寻找文件中使用的 ASCII 或其他方法编码的连续字符串。一些有用的信息可以通过在恶意代码样本中搜寻字符串得到,比如:①也恶意代码的名字;②帮助和命令行选项; ③用户对话框,可以通过它分析恶意代码的目的; ④后门密码;⑤恶意代码相关的网址; ⑥恶意代码作者或者攻击者的 E-mail 地址;⑦恶意代码用到的库,函数调用,以及其他的可执行文件; ⑧其他的有用的信息。
脚本分析:恶意代码如果是用 JS Perl 或者 shell 脚本等脚本语言编写的,那么恶意代码本身就可能带有源代码。通过文本编辑器将脚本打开查看源代码。脚本分析能帮助分析者用较短时间识别出大量流行的脚本类型。
静态反编译分析:对于携带解释器的恶意代码可以采用反编译工具查看源代码。源代码在编译时,代码会被编译器优化,组成部分被重写,使得程序更适合解释和执行,上述面向计算机优化的特性,使得编译的代码不适合逆向编译。因此,逆向编译是将对机器优化的代码重新转化成源代码,这使得程序结构和流程分离开来,同时变量的名字由机器自动生成,这使得逆向编译的代码有着较差的可读性。
静态反汇编分析:有线性遍历和递归遍历两种方法。GNU 程序 objdump 和一些链接优化工具使用线性遍历算法从输入程序的入口点开始反汇编,简单地遍历程序的整个代码区,反汇编它所遇到的每一条指令。虽然方法简单,但存在不能够处理嵌入指令流中的数据的问题,如跳转表。递归遍历算法试图用反汇编出来的控制流指令来指导反汇编过程,以此解决上面线性遍历所存在的问题。直观地说,无论何时反汇编器遇到 个分支或者 CALL 指令,反汇编都从那条指令的可能的后续指令继续执行。很多的二进制传输和优化系统采用这种方法。其缺点是很难正确判定间接控制转移的可能目标。恶意代码被反汇编后,就可用控制流分析来构造它的流程图,该图又可以被很多的数据流分析工具所使用。由于控制流程图是大多数静态分析的基础,所以不正确的流程图反过来会使整个静态分析过程得到错误的结果。